package Map.Map02;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/*
 *  HashMap存储自定义类型键值
 *  Map集合保证key是唯一的：
 *      作为key的元素，必须重写Hashcode和equals方法保证key唯一
 *
 *
 * */
public class HashMapSavePerson {
    public static void main(String[] args) {
        //Person类作为key
        System.out.println("Person类作为key");
        method01();
        System.out.println("-----------------------");
        //String类作为key
        System.out.println("String类作为key");
        method02();
    }

    private static void method02() {
        //创建hashmap,使用String作为key值
        HashMap<String, Person> map = new HashMap<>();
        //向HashMap中添加键值
        map.put("南京", new Person("张三", 20));
        map.put("北京", new Person("李四", 21));
        map.put("上海", new Person("王五", 30));
        map.put("南京", new Person("张南京", 20));
        //使用keyset方法,创建key的set集合
        Set<String> stringSet = map.keySet();
        //使用entrySet方法创建键与值关系的对象
        Set<Map.Entry<String, Person>> set = map.entrySet();
        //使用迭代器遍历set
        Iterator<Map.Entry<String, Person>> iterator = set.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Person> next = iterator.next();
            String key = next.getKey();
            Person value = next.getValue();
            System.out.println(key + "----->" + value);
        }

    }

    private static void method01() {
        //创建hashmap,使用Person类作为key
        //则需要重写hashcode和equals方法
        HashMap<Person, String> map = new HashMap<>();
        //向HashMap中添加键值
        map.put(new Person("张三", 20), "南京");
        map.put(new Person("李四", 21), "北京");
        map.put(new Person("王五", 30), "上海");
        map.put(new Person("张三", 20), "江苏");
        //使用keyset方法,创建key的set集合
        Set<Person> people = map.keySet();
        //使用for循环遍历key的set集合
        for (Person set : people) {
            //使用get方法获取对于key的value值
            System.out.println(set + "---->" + map.get(set));
        }

    }
}
